<?php

	class Database {
		
		private $mysqli = NULL;
		
		//Funktion som öppnar databasen.
		public function Connect(DBConfig $config) {
			
			$this->mysqli = new mysqli($config->host,
										$config->user,
										$config->pass,
										$config->db);
		
			//Om det inte gick att ansluta till databasen.								
			if ($this->mysqli->connect_error) {
				throw new Exception($this->mysqli->connect_error);
			}
			
			$this->mysqli->set_charset("utf8");
			
			return true;
		}
		
		//Funktion för att välja en användare.
		public function SelectUser($sqlQuery) {
			
			$stmt = $this->Prepare($sqlQuery);
		
			if ($stmt->execute() == false) {
				throw new Exception($this->mysqli->error);
			}
			$stmt->bind_result($a, $b);
			
			$ret = array();
			
			//Hämtar användarnamn, lösenord.
			while ($stmt->fetch()) {
				$ret['Username'] = $a;
				$ret['Password'] = $b;
			}
			$stmt->close();
			
			return $ret;
		}
			
		//Förebereder en sql query.
		public function Prepare($sql) {
			
			$ret = $this->mysqli->prepare($sql);
			
			if ($ret == false) {
				throw new Exception($this->mysqli->error);
			}
			
			return $ret;
		}
		
		//Funktion för att lägga till en användare i databasen.
		public function Insert(mysqli_stmt $stmt) {
			
			if ($stmt->execute() == false) {
				throw new Exception($this->mysqli->error);
			}
			
			$ret = $stmt->insert_id;			
			$stmt->close();
			
			return $ret;
		}
		
		//Funktion som tar bort från databasen.
		public function Delete($sql) {
			
			if ($sql == false) {
				throw new Exception($this->mysqli->error);
			}
			
			return $sql;
		}
		
		//Funktion som stänger databasen.
		public function Close() {
			return $this->mysqli->close();
		}
		
		//Funktion för testerna av databasen.
		public function Test(DBConfig $dbConfig) {
			
			$db = new Database();
			
			//Testar så att det går öppna databasen.
			if ($db->Connect($dbConfig) == false) {
				echo "Database connection failed.";
				return false;
			}
			
			//Testar så att det går lägga till i databasen.
			$nrPostsBefore = $db->SelectUser("SELECT Username, Password FROM InsertTable");
			
			$stmt = $db->Prepare("INSERT INTO InsertTable VALUES (null,'Tsting','Hejhej')");
			$db->Insert($stmt);
			
			$nrPostsAfter = $db->SelectUser("SELECT Username, Password FROM InsertTable");
			
			if ($nrPostsBefore != $nrPostsAfter) {
				echo "Prepare or Insert failed.";
				return false;
			}
			
			//Testar så att det går att välja en användare från databasen.
			if ($db->SelectUser("SELECT Username, Password FROM NotEmpty") == 1) {
				echo "Database SelectUser() failed.";
				return false;
			}
			
			//Testar så att det går radera användare
			if ($db->Delete("DELETE FROM user WHERE Username = 'Sofia'") == false) {
				echo "Database Delete() failed.";
				return false;
			}
			
			//Testar att det går stänga databasen.
			if ($db->CLose() == false) {
				Echo "Database Close() failed.";
				return false;
			}
			
			return true;
		}
	}
